0 CpxTRS
↳1 TrsToWeightedTrsProof (BOTH BOUNDS(ID, ID), 0 ms)
↳2 CpxWeightedTrs
↳3 TypeInferenceProof (BOTH BOUNDS(ID, ID), 5 ms)
↳4 CpxTypedWeightedTrs
↳5 CompletionProof (UPPER BOUND(ID), 0 ms)
↳6 CpxTypedWeightedCompleteTrs
↳7 NarrowingProof (BOTH BOUNDS(ID, ID), 0 ms)
↳8 CpxTypedWeightedCompleteTrs
↳9 CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID), 0 ms)
↳10 CpxRNTS
↳11 InliningProof (UPPER BOUND(ID), 55 ms)
↳12 CpxRNTS
↳13 SimplificationProof (BOTH BOUNDS(ID, ID), 0 ms)
↳14 CpxRNTS
↳15 CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID), 0 ms)
↳16 CpxRNTS
↳17 IntTrsBoundProof (UPPER BOUND(ID), 285 ms)
↳18 CpxRNTS
↳19 IntTrsBoundProof (UPPER BOUND(ID), 22 ms)
↳20 CpxRNTS
↳21 ResultPropagationProof (UPPER BOUND(ID), 0 ms)
↳22 CpxRNTS
↳23 IntTrsBoundProof (UPPER BOUND(ID), 115 ms)
↳24 CpxRNTS
↳25 IntTrsBoundProof (UPPER BOUND(ID), 112 ms)
↳26 CpxRNTS
↳27 FinalProof (⇔, 0 ms)
↳28 BOUNDS(1, n^1)
dbl(S(0), S(0)) → S(S(S(S(0))))
unsafe(S(x)) → dbl(unsafe(x), 0)
unsafe(0) → 0
dbl(0, y) → y
dbl(S(0), S(0)) → S(S(S(S(0)))) [1]
unsafe(S(x)) → dbl(unsafe(x), 0) [1]
unsafe(0) → 0 [1]
dbl(0, y) → y [1]
dbl(S(0), S(0)) → S(S(S(S(0)))) [1]
unsafe(S(x)) → dbl(unsafe(x), 0) [1]
unsafe(0) → 0 [1]
dbl(0, y) → y [1]
dbl :: 0:S → 0:S → 0:S S :: 0:S → 0:S 0 :: 0:S unsafe :: 0:S → 0:S |
(a) The obligation is a constructor system where every type has a constant constructor,
(b) The following defined symbols do not have to be completely defined, as they can never occur inside other defined symbols:
none
(c) The following functions are completely defined:
unsafe
dbl
dbl(v0, v1) → 0 [0]
Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules:
The TRS has the following type information:
Rewrite Strategy: INNERMOST |
Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules:
The TRS has the following type information:
Rewrite Strategy: INNERMOST |
0 => 0
dbl(z, z') -{ 1 }→ y :|: y >= 0, z = 0, z' = y
dbl(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
dbl(z, z') -{ 1 }→ 1 + (1 + (1 + (1 + 0))) :|: z = 1 + 0, z' = 1 + 0
unsafe(z) -{ 2 }→ dbl(dbl(unsafe(x'), 0), 0) :|: x' >= 0, z = 1 + (1 + x')
unsafe(z) -{ 2 }→ dbl(0, 0) :|: z = 1 + 0
unsafe(z) -{ 1 }→ 0 :|: z = 0
dbl(z, z') -{ 1 }→ 1 + (1 + (1 + (1 + 0))) :|: z = 1 + 0, z' = 1 + 0
dbl(z, z') -{ 1 }→ y :|: y >= 0, z = 0, z' = y
dbl(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
dbl(z, z') -{ 1 }→ y :|: y >= 0, z = 0, z' = y
dbl(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
dbl(z, z') -{ 1 }→ 1 + (1 + (1 + (1 + 0))) :|: z = 1 + 0, z' = 1 + 0
unsafe(z) -{ 3 }→ y :|: z = 1 + 0, y >= 0, 0 = 0, 0 = y
unsafe(z) -{ 2 }→ dbl(dbl(unsafe(x'), 0), 0) :|: x' >= 0, z = 1 + (1 + x')
unsafe(z) -{ 1 }→ 0 :|: z = 0
unsafe(z) -{ 2 }→ 0 :|: z = 1 + 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
dbl(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
dbl(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
dbl(z, z') -{ 1 }→ 1 + (1 + (1 + (1 + 0))) :|: z = 1 + 0, z' = 1 + 0
unsafe(z) -{ 3 }→ y :|: z = 1 + 0, y >= 0, 0 = 0, 0 = y
unsafe(z) -{ 2 }→ dbl(dbl(unsafe(z - 2), 0), 0) :|: z - 2 >= 0
unsafe(z) -{ 1 }→ 0 :|: z = 0
unsafe(z) -{ 2 }→ 0 :|: z = 1 + 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
{ dbl } { unsafe } |
dbl(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
dbl(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
dbl(z, z') -{ 1 }→ 1 + (1 + (1 + (1 + 0))) :|: z = 1 + 0, z' = 1 + 0
unsafe(z) -{ 3 }→ y :|: z = 1 + 0, y >= 0, 0 = 0, 0 = y
unsafe(z) -{ 2 }→ dbl(dbl(unsafe(z - 2), 0), 0) :|: z - 2 >= 0
unsafe(z) -{ 1 }→ 0 :|: z = 0
unsafe(z) -{ 2 }→ 0 :|: z = 1 + 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
dbl(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
dbl(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
dbl(z, z') -{ 1 }→ 1 + (1 + (1 + (1 + 0))) :|: z = 1 + 0, z' = 1 + 0
unsafe(z) -{ 3 }→ y :|: z = 1 + 0, y >= 0, 0 = 0, 0 = y
unsafe(z) -{ 2 }→ dbl(dbl(unsafe(z - 2), 0), 0) :|: z - 2 >= 0
unsafe(z) -{ 1 }→ 0 :|: z = 0
unsafe(z) -{ 2 }→ 0 :|: z = 1 + 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
dbl: runtime: ?, size: O(n1) [3 + z'] |
dbl(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
dbl(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
dbl(z, z') -{ 1 }→ 1 + (1 + (1 + (1 + 0))) :|: z = 1 + 0, z' = 1 + 0
unsafe(z) -{ 3 }→ y :|: z = 1 + 0, y >= 0, 0 = 0, 0 = y
unsafe(z) -{ 2 }→ dbl(dbl(unsafe(z - 2), 0), 0) :|: z - 2 >= 0
unsafe(z) -{ 1 }→ 0 :|: z = 0
unsafe(z) -{ 2 }→ 0 :|: z = 1 + 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
dbl: runtime: O(1) [1], size: O(n1) [3 + z'] |
dbl(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
dbl(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
dbl(z, z') -{ 1 }→ 1 + (1 + (1 + (1 + 0))) :|: z = 1 + 0, z' = 1 + 0
unsafe(z) -{ 3 }→ y :|: z = 1 + 0, y >= 0, 0 = 0, 0 = y
unsafe(z) -{ 2 }→ dbl(dbl(unsafe(z - 2), 0), 0) :|: z - 2 >= 0
unsafe(z) -{ 1 }→ 0 :|: z = 0
unsafe(z) -{ 2 }→ 0 :|: z = 1 + 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
dbl: runtime: O(1) [1], size: O(n1) [3 + z'] |
dbl(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
dbl(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
dbl(z, z') -{ 1 }→ 1 + (1 + (1 + (1 + 0))) :|: z = 1 + 0, z' = 1 + 0
unsafe(z) -{ 3 }→ y :|: z = 1 + 0, y >= 0, 0 = 0, 0 = y
unsafe(z) -{ 2 }→ dbl(dbl(unsafe(z - 2), 0), 0) :|: z - 2 >= 0
unsafe(z) -{ 1 }→ 0 :|: z = 0
unsafe(z) -{ 2 }→ 0 :|: z = 1 + 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
dbl: runtime: O(1) [1], size: O(n1) [3 + z'] unsafe: runtime: ?, size: O(1) [3] |
dbl(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
dbl(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
dbl(z, z') -{ 1 }→ 1 + (1 + (1 + (1 + 0))) :|: z = 1 + 0, z' = 1 + 0
unsafe(z) -{ 3 }→ y :|: z = 1 + 0, y >= 0, 0 = 0, 0 = y
unsafe(z) -{ 2 }→ dbl(dbl(unsafe(z - 2), 0), 0) :|: z - 2 >= 0
unsafe(z) -{ 1 }→ 0 :|: z = 0
unsafe(z) -{ 2 }→ 0 :|: z = 1 + 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
dbl: runtime: O(1) [1], size: O(n1) [3 + z'] unsafe: runtime: O(n1) [3 + 4·z], size: O(1) [3] |